package com.exam.controller;

import com.exam.entity.ApiResult;
import com.exam.entity.PaperManage;
import com.exam.service.PaperService;
import com.exam.serviceimpl.FillQuestionServiceImpl;
import com.exam.serviceimpl.JudgeQuestionServiceImpl;
import com.exam.serviceimpl.MultiQuestionServiceImpl;
import com.exam.util.ApiResultHandler;
import com.exam.vo.Item;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/** 模块-页面：题库管理-增加题库-在线组装
 *
 */
@RestController
public class ItemController {

    @Autowired
    MultiQuestionServiceImpl multiQuestionService;

    @Autowired
    FillQuestionServiceImpl fillQuestionService;

    @Autowired
    JudgeQuestionServiceImpl judgeQuestionService;

    @Autowired
    PaperService paperService;


    /** 组装试卷
     * 当点击“立即组装”按钮时，前端发送请求至此，请求数据已封装为一个VO模型的对象，
       获取三种题型的数量Num、paperId（exam_manager表中的）、考试科目subject，

     * @param item 题目模型VO
     * @return
     */
    @PostMapping("/item")
    public ApiResult ItemController(@RequestBody Item item) {

        // 获取用户输入的选择题数量
        Integer changeNumber = item.getChangeNumber();
        // 获取用户输入的填空题数量
        Integer fillNumber = item.getFillNumber();
        // 获取用户输入的判断题数量
        Integer judgeNumber = item.getJudgeNumber();
        // 点击“增加题库”时用户选中的试卷编号
        Integer paperId = item.getPaperId();

        // 组装选择题
        // 获取请求数据中的考试科目subject，在multi_question表中随机查询指定数量的符合subject条件的选择题，封装多条选择题的questionId封装到集合changeNumbers中
        List<Integer> changeNumbers = multiQuestionService.findBySubject(item.getSubject(), changeNumber);
        if(changeNumbers==null){
            return ApiResultHandler.buildApiResult(400,"选择题数据库获取失败",null);
        }
        //遍历questionId集合，循环创建中间关系对象，添加记录到paper_manager表中，完成试卷中选择题的组装
        for (Integer number : changeNumbers) {
            //创建中间关系对象                       当前试卷paperId   选择题  当前题目questionId
            PaperManage paperManage = new PaperManage(paperId,1,number);
            // 将当前试卷和当前题目的关系保存到paper_manager表中
            int index = paperService.add(paperManage);
            if(index==0)
                return ApiResultHandler.buildApiResult(400,"选择题组卷保存失败",null);
        }

        // 组装填空题
        List<Integer> fills = fillQuestionService.findBySubject(item.getSubject(), fillNumber);
        if(fills==null)
            return ApiResultHandler.buildApiResult(400,"填空题数据库获取失败",null);
        for (Integer fillNum : fills) {
            PaperManage paperManage = new PaperManage(paperId,2,fillNum);
            int index = paperService.add(paperManage);
            if(index==0)
                return ApiResultHandler.buildApiResult(400,"填空题题组卷保存失败",null);
        }
        // 组装判断题
        List<Integer> judges = judgeQuestionService.findBySubject(item.getSubject(), judgeNumber);
        if(fills==null)
            return ApiResultHandler.buildApiResult(400,"判断题数据库获取失败",null);
        for (Integer judge : judges) {
            PaperManage paperManage = new PaperManage(paperId,3,judge);
            int index = paperService.add(paperManage);
            if(index==0)
                return ApiResultHandler.buildApiResult(400,"判断题题组卷保存失败",null);
        }

        return ApiResultHandler.buildApiResult(200,"试卷组卷成功",null);
    }
}
